나도 만들어보자! 뇌파 통신을 오픈소스프로젝트로 | 매거진에 참여하세요

questTypeString.01quest1SubTypeString.04
publish_date : 25.05.12

나도 만들어보자! 뇌파 통신을 오픈소스프로젝트로

#BCI #프로젝트 #개인 #오픈소스 #뇌파분석 #코딩 #프로그래밍

content_guide

1. OpenBCI란 무엇인가?

OpenBCI(Open-source Brain-Computer Interface)

누구나 뇌파(EEG), 근전도(EMG), 심전도(ECG) 등의 생체 신호를 수집하고 분석할 수 있도록 만든 오픈소스 기반의 플랫폼입니다.

2013년 MIT 미디어랩 출신의 Joel Murphy와 Conor Russomanno가 시작했으며, 킥스타터 크라우드펀딩을 통해 초기 자금을 확보했습니다.


2. 왜 OpenBCI가 나왔을까?

OpenBCI의 출현은 다음과 같은 요구에 부응한 결과입니다:

  • - 고가의 EEG 장비를 대체할 저비용 솔루션 필요

  • - 개발자 및 메이커 커뮤니티의 참여 확대

  • - 뇌-기계 인터페이스에 대한 접근성 향상

  • 핵심 가치

    • 오픈소스 하드웨어 & 소프트웨어

    • 낮은 진입 장벽

    • 개발자 및 메이커 커뮤니티 중심

오늘날 OpenBCI는 뉴로피드백 연구, BCI 앱 개발, 뇌-로봇 인터페이스, 심리학 실험 등 다양한 분야에서 활용되고 있습니다.

과거에는 뇌파나 생체 신호를 측정하기 위해 수천만 원짜리 의료 장비가 필요했습니다.

하지만 연구자, 해커, 예술가, 스타트업 등은 손쉽고 저렴한 대안을 원했습니다.

OpenBCI는 다음과 같은 이유로 큰 반향을 일으켰습니다:

  • - 저렴한 가격: 전문 EEG 장비의 10~20% 수준

  • - 확장성: 4~16채널까지 자유롭게 구성 가능

  • - 개방성: 아두이노 기반으로 누구나 수정 가능

  • - 커뮤니티 공유: GitHub, Discord, Forum 기반의 사용자 생태계

즉, 기존의 고가, 폐쇄적인 뇌파 연구의 장벽을 허물고 '뇌 데이터를 민주화'한 도구입니다.

3. OpenBCI의 구성 요소

3-1. 하드웨어

  • - Cyton Board (8채널)
    OpenBCI의 대표 제품. 뇌파를 측정하는 기본 장치로, 아두이노와 호환됩니다.

  • - Daisy Module
    Cyton에 추가하면 16채널까지 확장 가능.

  • - Ganglion Board (4채널)
    엔트리급 보드로, 저렴하고 간단한 실험에 적합.

  • - Ultracortex Headset
    EEG 전극을 쉽게 고정할 수 있는 3D 프린터 기반의 헤드셋.

  • - WiFi Shield
    Bluetooth 대신 WiFi로 데이터를 빠르게 전송하는 모듈.

3-2. 소프트웨어

  • - OpenBCI GUI
    뇌파 신호 시각화, 기록, 간단한 분석 기능 제공.

  • - BrainFlow
    다양한 보드를 통합 제어할 수 있는 Python, C++, JavaScript용 SDK.

  • - OpenViBE, BCILAB 등 외부 툴 연동도 가능.

  • * Cyton Board (사이톤 보드)

  • - 뇌파 신호를 수집하는 EEG 보드

  • - 8채널의 신호를 수집 가능하며, 뇌파를 빠르게 디지털 신호로 변환함

  • - EEG 센서에서 들어오는 매우 미세한 신호를 정확하게 측정하여 컴퓨터로 전달하기 위한 핵심 장치

참고: ‘채널’이란, 측정하는 뇌 부위의 수를 의미. 8채널이면 8곳의 뇌파를 동시에 측정 가능.

  • * Ultracortex Headset (울트라코텍스 헤드셋)

  • - EEG 센서를 머리에 고정하기 위한 3D 프린팅 헤드셋

  • - 전극을 정확한 위치에 고정하기 위한 틀로, 머리형에 맞게 조절 가능

  • - 뇌파의 정확한 측정을 위해 센서를 두피의 특정 위치에 고정할 필요가 있음

참고: EEG 센서 위치는 국제적으로 정해진 ‘10-20 시스템’을 따름 (예: Fp1, Fp2, Cz 등)

  • * BrainFlow SDK란?

OpenBCI 하드웨어에서 받은 데이터를 프로그래밍적으로 제어할 때 쓰는 것이 BrainFlow SDK입니다.

  • 역할: OpenBCI 보드에서 실시간 데이터 수신, 필터링, 시각화 가능

  • 왜 필요한가?: Python, JavaScript, C++ 등 다양한 언어에서 OpenBCI를 쉽게 활용할 수 있게 해줌

4. OpenBCI로 무엇을 할 수 있을까?

  • - 집중도 분석 : 베타파 활동을 기반으로 집중 정도를 실시간 시각화.

    • - 뉴로피드백 앱 : 사용자가 집중하거나 이완할 때 색상이 변하는 시각 피드백 제공.

  • - BCI 게임 : 집중하면 캐릭터가 앞으로 전진, 이완하면 멈추는 미니게임 구현.

  • - 드론 제어 : EEG 패턴을 명령으로 변환해 드론의 방향 조작 가능.

  • - VR/AR 연동 : 뇌 상태에 따라 VR 콘텐츠를 변화시키는 인터랙션 구현.

import argparse
import time

from brainflow.board_shim import BoardShim, BrainFlowInputParams, BoardIds


def main():
    BoardShim.enable_dev_board_logger()

    parser = argparse.ArgumentParser()
    # use docs to check which parameters are required for specific board, e.g. for Cyton - set serial port
    parser.add_argument('--timeout', type=int, help='timeout for device discovery or connection', required=False,
                        default=0)
    parser.add_argument('--ip-port', type=int, help='ip port', required=False, default=0)
    parser.add_argument('--ip-protocol', type=int, help='ip protocol, check IpProtocolType enum', required=False,
                        default=0)
    parser.add_argument('--ip-address', type=str, help='ip address', required=False, default='')
    parser.add_argument('--serial-port', type=str, help='serial port', required=False, default='')
    parser.add_argument('--mac-address', type=str, help='mac address', required=False, default='')
    parser.add_argument('--other-info', type=str, help='other info', required=False, default='')
    parser.add_argument('--serial-number', type=str, help='serial number', required=False, default='')
    parser.add_argument('--board-id', type=int, help='board id, check docs to get a list of supported boards',
                        required=True)
    parser.add_argument('--file', type=str, help='file', required=False, default='')
    parser.add_argument('--master-board', type=int, help='master board id for streaming and playback boards',
                        required=False, default=BoardIds.NO_BOARD)
    args = parser.parse_args()

    params = BrainFlowInputParams()
    params.ip_port = args.ip_port
    params.serial_port = args.serial_port
    params.mac_address = args.mac_address
    params.other_info = args.other_info
    params.serial_number = args.serial_number
    params.ip_address = args.ip_address
    params.ip_protocol = args.ip_protocol
    params.timeout = args.timeout
    params.file = args.file
    params.master_board = args.master_board

    board = BoardShim(args.board_id, params)
    board.prepare_session()
    board.start_stream ()
    time.sleep(10)
    # data = board.get_current_board_data (256) # get latest 256 packages or less, doesnt remove them from internal buffer
    data = board.get_board_data()  # get all data and remove it from internal buffer
    board.stop_stream()
    board.release_session()

    print(data)


if __name__ == "__main__":
    main()

5. OpenBCI의 한계와 미래

  • 비침습형이기 때문에 정확도나 정밀성은 의료기기보다 낮고,

  • 착용이 번거롭고, 외부 잡음에 민감함 , 뇌파는 매우 개인차가 크므로 학습이 필요합니다.

그러나...

  • Neuralink와 같은 침습형 기술에 비해 안전하고 접근성 높으며,

  • 머신러닝 기술과 결합되면 정밀도도 지속 향상 중에 있습니다.

  • 향후 웨어러블화, 디자인 개선을 통해 일상에서도 사용 가능합니다.

결론: 나만의 BCI 프로젝트, 시작해보자

OpenBCI는 뇌파를 연구하고 응용하고 싶은 사람에게 최고의 입문 도구입니다.

무엇보다 중요한 것은, 이 기술이 이제 연구실 밖으로 나와 "누구나 직접 체험할 수 있게" 되었다는 점입니다.

당신이 학생이든 개발자든 예술가든, OpenBCI는 뇌파 데이터라는 새로운 언어를 배우고 세상과 소통할 수 있는 기회를 열어줍니다.

상세한 내용은 아래 내용을 참고해주세요

https://brainflow.org/